<html>

<head>
<title>org.toryt.annotations_I</title>
</head>

<body>
<!-- MUDO unfinished; move to overview? -->

<h3>Invariants</h3>
<p>Type invariants express conditions that have to hold for all objects of the type
  (and subtypes) at stable times (i.e., inbetween calls of public methods).
  Behavioral subtyping says that in subtypes invariants can be added or strengthened,
  but not weakened or removed.</p>
<p>Public type invariants are mentioned as {@link Expression expressions} inside
  a {@link TypeContract} annotation on the type level, or, since some invariants
  are particulary focussed on one property, inside the {@link Basic} annotation
  ({@link Basic#invars()}) on the basic inspector of the property.</p>
<p>Representation invariants, i.e., invariants on private fields, are expressed
  as {@link Expression expressions} inside a ?????? MUDO ???? annation on the field.</p>

<h3>Method contracts</h3>
<p>All methods have a contract, except for {@link Basic} inspectors.
  The method contract is expressed in a {@link MethodContract} annotation.
  It features preconditions ({@link MethodContract#pre()}), postconditions
  ({@link MethodContract#post()}), which are {@link Expression expressions},
  and exception-definitions.</p>

<h3>Initial values</h3>


<h3>General</h3>
<p>The {@link java.lang.annotation.Retention retention policy} for all Toryt
  contract annotations is {@link java.lang.annotation.RetentionPolicy#RUNTIME}.</p>
</body>
</html>
